Use case: DMA channel linear linked-list mode transfer in interrupt mode

Sequence diagram

Linked-list mode transfer in interrupt mode.

  @startuml
  hide footbox
  participant "User Application" as part1
  participant "DMA Driver"       as part3
  participant "NVIC"             as part4

  group Configuration
  part1->part3 : HAL_DMAEx_List_BuildNode()
  part1->part3 : HAL_DMAEx_List_InsertNode()
  part1->part3 : HAL_DMAEx_List_Init()
  end

  group Process
      group  Start
          part1->part3 : HAL_DMAEx_List_Start_IT()
      end
      group  Interrupt
          part4->part3 : HAL_DMA_IRQHandler()
          part3->part1 : User callback()
      end
  end

  @enduml

Code snippet

HAL1

HAL2

HAL_DMAEx_List_BuildNode(&NodeConf, &Node1);

HAL_DMAEx_List_InsertNode(&Queue2, NULL, &Node1);


HAL_DMAEx_List_Init(&LL_HandleDMA1);


HAL_DMAEx_List_LinkQ(&LL_HandleDMA1, &Queue2);

HAL_DMAEx_List_Start_IT(&LL_HandleDMA1)
HAL_DMA_FillNodeConfig(Node1, NodeConf, HAL_DMA_NODE_2D_ADDRESSING);

HAL_Q_Init(Queue2, &HAL_DMA_2DAddressing_DescOps);
HAL_Q_InsertNode(Queue2, NULL, Node1);

HAL_DMA_Init(LL_DMA_Handle1, HAL_GPDMA1_CH12);
HAL_DMA_SetConfigLinkedListXfer(LL_DMA_Handle1, LL_xfer_config1);



HAL_DMA_StartLinkedListXfer_IT(LL_DMA_Handle1, Queue2);

Key changes

  1. HAL2 supports interrupt-driven linked-list transfers through HAL_DMA_StartLinkedListXfer_IT().

  2. HAL2 uses a queue-based approach for building and inserting nodes.

  3. The DMA interrupt handler remains HAL_DMA_IRQHandler().